<?php
namespace carrito;

class Carrito
{
	//atributos de la clase
	public $num_producto;
	private $cod_factura;
	private $cod_prod;
	private $cantidad;
	private $descuento;
	private $neto;
	private $iva;
	private $total;
	private $precio_venta;
	private $costo;
	private $nombre_prod;

	//constructor. Realiza las tareas de inicializar los objetos cuando se instancian
	//inicializa el numero de productos a 0
	function __construct()
	{
		$this->num_producto=0;
	}

	function setcod_factura($cod_factura,$linea)
	{
		$this->cod_factura[$linea]=$cod_factura;
	}

	function setcod_prod($cod_prod,$linea)
	{
		$this->cod_prod[$linea]=$cod_prod;
	}

	function setcantidad($cantidad,$linea)
	{
		$this->cantidad[$linea]=$cantidad;
	}
	function setcosto($costo,$linea)
	{
		$this->costo[$linea] = $costo;
	}
	function setdescuento($descuento,$linea)
	{
		$this->descuento[$linea]=$descuento;
	}

	function setneto($neto,$linea)
	{
		$this->neto[$linea]=$neto;
	}

	function setprecio_venta($precio_venta,$linea)
	{
		$this->precio_venta[$linea]=$precio_venta;
	}

	function setiva($iva,$linea)
	{
		$this->iva[$linea]=$iva;
	}

	function settotal($total,$linea)
	{
		$this->total[$linea]=$total;
	}

	function setnombre_prod($nombre_prod,$linea)
	{
		$this->nombre_prod[$linea]=$nombre_prod;
	}

	function getcod_factura($num)
	{
		return $this->cod_factura[$num];
	}

	function getcod_prod($num)
	{
		return $this->cod_prod[$num];
	}

	function getcantidad($num)
	{
		return $this->cantidad[$num];
	}

	function getcosto($num)
	{
		return $this->costo[$num];
	}

	function getdescuento($num)
	{
		return $this->descuento[$num];
	}

	function getneto($num)
	{
		return $this->neto[$num];
	}

	function getprecio_venta($num)
	{
		return $this->precio_venta[$num];
	}

	function getiva($num)
	{
		return $this->iva[$num];
	}

	function gettotal($num)
	{
		return $this->total[$num];
	}

	function getnombre_prod($num)
	{
		return $this->nombre_prod[$num];
	}

	//Retorna valor de la ultima posicion del array
	public function getnum_producto()
	{
		return $this->num_producto;
	}
	 
	//Retorna la posicion del producto en el array
	public function getpos_producto($cod_prod)
	{
		//recorre cada producto ingresado
		for( $i = 0 ; $i < $this->getnum_producto() ; $i++ )
		{
			//compara el codigo del producto con el codigo que se quiere ingresar
			if( $this->getcod_prod($i) != -1 && $this->getcod_prod($i) == $cod_prod)
			{
				//si existe retorna la linea del producto
				return (int)$i;
			}
		}
		 
		return false;

	}
	 
	//valida si el producto esta ingresado en el carrito
	public function existe_producto($cod_prod)
	{
		 
		//recorre cada producto ingresado
		for( $i = 0 ; $i < $this->getnum_producto() ; $i++ )
		{
			//compara el codigo del producto con el codigo que se quiere ingresar
			if( $this->getcod_prod($i) != -1 && $this->getcod_prod($i) == $cod_prod)
			{
				//si existe retorna verdadero
				return true;
			}
		}
		 
		//Si no existe un producto ingresado con el mismo codigo retorna falso
		return false;

	}
	 
	//Introduce un producto en el array
	public function introduce_producto($cod_factura,$cod_prod,$cantidad,$descuento,$precio,$nombre_prod,$costo)
	{

		//Si el producto no existe en el carrito, lo ingresa normalmente
		if(!$this->existe_producto($cod_prod))
		{
			 
			$neto = $cantidad * ($precio - round($precio * $descuento/100));
			$iva = round($neto * 0.19);
			$total = $neto + $iva;
			$this->setcod_factura($cod_factura,$this->num_producto);
			$this->setnombre_prod($nombre_prod,$this->num_producto);
			$this->setcod_prod($cod_prod,$this->num_producto);
			$this->setcantidad($cantidad,$this->num_producto);
			$this->setdescuento($descuento,$this->num_producto);
			$this->setneto($neto,$this->num_producto);
			$this->setprecio_venta($precio - round($precio * $descuento/100),$this->num_producto);
			$this->setiva($iva,$this->num_producto);
			$this->settotal($total,$this->num_producto);
			$this->setcosto($costo,$this->num_producto);
			$this->num_producto++;
		} //si el producto existe en el carrito, actualiza la cantidad y neto
		else
		{
			//obtiene posicion del producto
			$pos = $this->getpos_producto($cod_prod);
			 
			//obtiene cantidad actual y se suma a la nueva cantidad
			$cantidadActual = $this->getcantidad($pos);
			$cantidad = $cantidad + $cantidadActual;
			 
			//recalcula todo con la nueva cantidad y valores ingresados
			$neto = $cantidad * ($precio - round($precio * $descuento/100));
			$iva = round($neto * 0.19);
			$total = $neto + $iva;
			$this->setcod_factura($cod_factura,$pos);
			$this->setnombre_prod($nombre_prod,$pos);
			$this->setcod_prod($cod_prod,$pos);
			$this->setcantidad($cantidad,$pos);
			$this->setdescuento($descuento,$pos);
			$this->setneto($neto,$pos);
			$this->setprecio_venta($precio - round($precio * $descuento/100),$pos);
			$this->setiva($iva,$pos);
			$this->settotal($total,$pos);
			$this->setcosto($costo,$pos);
		}

		return true;
	}

	public function elimina_producto ($linea)
	{
		$this->setcod_prod(-1,$linea);
	}

	public function vacio(){
            $cont=0; // cuenta los productos activos
            for($i = 0 ; $i < $this->getnum_producto() ; $i++) {
		if($this->getcod_prod($i) != -1 && $this->getcantidad($i) > 0) {
                    $cont++;
		}
            }
            return $cont <= 0;
        }
        
        public function vaciar(){
            $this->num_producto = 0;
            $this->cod_factura = null;
            $this->cod_prod = null;
            $this->cantidad = null;
            $this->descuento = null;
            $this->neto = null;
            $this->iva = null;
            $this->total = null;
            $this->precio_venta = null;
            $this->costo = null;
            $this->nombre_prod = null;
        }
        
        public function getHtmlCarrito(){
            $html = "";
            if(!$this->vacio()) {
                $suma = 0;
                $cont = 1; 
                
                $html .= "<table class=\"tablaDatos\" width=\"100%\">";
                $html .= "<tr>";
                $html .= "<th>&#8470;</td>";
                $html .= "<th>Cod.</td>";
                $html .= "<th>Prod.</td>";
                $html .= "<th>Cant.</td>";
                $html .= "<th>Desc.</td>";
                $html .= "<th>Precio venta unit.</td>";
                $html .= "<th>Subtotal</td>";
                $html .= "<th>Acciones</td>";
                $html .= "</tr>";
                
                for($i = 0; $i < $this->getnum_producto(); $i++){
                    if($this->getcod_prod($i) != -1 && $this->getcantidad($i) > 0 ){
                        $url = $_SERVER["PHP_SELF"] . '?linea=' . $i;                      
                        $html .= "<tr class=\"modo1\">";
                        $html .= "<td>" . $cont  . "</td>";
                        $html .= "<td>" . $this->getcod_prod($i) . "</td>";
                        $html .= "<td>" . $this->getnombre_prod($i) . "</td>";
                        $html .= "<td>" . $this->getcantidad($i) . "</td>";
                        $html .= "<td>" . $this->getdescuento($i) . "%</td>";
                        $html .= "<td>$" . number_format($this->getprecio_venta($i),0,",",".") . "</td>";
                        $html .= "<td>$" . number_format($this->getneto($i),0,",",".") . "</td>";
                        $html .= "<td><a href=\"javascript:eliminarProducto(" . $i . ");\"><img src=\"" . $_SESSION['BASE'] . "/img/remove.png\" border=\"0\"></td>";
                        $html .= "</tr>";                     
                        $suma += $this->getneto($i);
                        $cont++;
                    }
                }
               
                    //<!-- Neto -->
                $html .= "<tr class=\"modo1\">";
                $html .= "<td><b>NETO:</b></td>";
                $html .= "<td><b>$" . number_format(round($suma),0,",",".") . "</b></td>";
                $html .= "<td>&nbsp;</td>";
                $html .= "</tr>";
                //<!-- IVA -->
                $html .= "<tr class=\"modo1\">";
                $html .= "<td><b>IVA (19%):</b></td>";
                $html .= "<td><b>$" . number_format(round($suma * 0.19),0,",",".") . "</b></td>";
                $html .= "<td>&nbsp;</td>";
                $html .= "</tr>";
                //<!-- Total -->
                $html .= "<tr class=\"modo1\">";
                $html .= "<td><b>TOTAL:</b></td>";
                $html .= "<td><b>$" . number_format(round($suma * 1.19),0,",",".") . "</b></td>";
                $html .= "<td>&nbsp;</td>";
                $html .= "</tr>";
                $html .= "</table>";
                
            }else{
                $html .= "No ha ingresado productos.";
            }
            
            return $html;
        }

}
